#ifndef SYSTEM_LOG_H
#define SYSTEM_LOG_H

#include <string>
#include <cstdarg> // 用于可变参数处理
#include "config/config.h"
#include <mutex> // 新增：用于线程安全

/*

*/
enum log_level
{
    LEVEL_INFO = 0,
    LEVEL_WARNING,
    LEVEL_ERROR,
    LEVEL_FATAL,
#ifdef EQUIP_DEBUG
    LEVEL_DEBUG,
#endif
    LEVEL_VERBOSE,
    LEVEL_NONE,
    LEVEL_EMPTY
};

namespace equip_system
{

namespace system_log
{
/**
 * 
 */
class CSysLog
{
public:
    CSysLog(){};
    ~CSysLog(){};

    /**
     * 
     */
    int init(const char *fileName, size_t maxFileSize = 0, int maxFiles = 0);

    /**
     * 
     */
    static int print(log_level level, const char *tag, const char *format, ...);

private:
    /**
     * 新增：用于跟踪上一次日志内容和线程安全
     */
    static std::string m_lastLogContent;
    static std::mutex m_logMutex;
};

/**
 * 声明全局日志实例
 */
extern CSysLog g_sysLog; 
};                       // namespace system_log
};                       // namespace equip_system

/**
 * 
 */
#define ES_LOG(tag, level, format, ...)                                              \
    do                                                                               \
    {                                                                                \
        equip_system::system_log::g_sysLog.print(level, tag, format, ##__VA_ARGS__); \
    } while (0)

/**
 * 常用日志级别快捷宏
 */
#define ES_LOGI(tag, format, ...) ES_LOG(tag, LEVEL_INFO, format, ##__VA_ARGS__)
#define ES_LOGW(tag, format, ...) ES_LOG(tag, LEVEL_WARNING, format, ##__VA_ARGS__)
#define ES_LOGE(tag, format, ...) ES_LOG(tag, LEVEL_ERROR, format, ##__VA_ARGS__)
#define ES_LOGF(tag, format, ...) ES_LOG(tag, LEVEL_FATAL, format, ##__VA_ARGS__)
#ifdef EQUIP_DEBUG
#define ES_LOGD(tag, format, ...) ES_LOG(tag, LEVEL_DEBUG, format, ##__VA_ARGS__)
#else
#define ES_LOGD(tag, format, ...) \
    do                            \
    {                             \
    } while (0) // 调试模式关闭时忽略DEBUG日志
#endif

#endif // SYSTEM_LOG_H